<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script>

      const arr = [
        {id:1,pid:0,name:'总裁办'},
        {id:2,pid:0,name:'教务部'},
        {id:3,pid:0,name:'财务部'},
        {id:4,pid:3,name:'财务部的儿子部门'},
        {id:10,pid:4,name:'财务部的儿子部门的的儿子部门'},

      ]

      function transListToTreeData(list,RootValue){
        const array = []

        list.forEach(item=> {
          if (item.pid === RootValue)  {
          //   // 传入当前部门的id，去找所有数据中找子级，如果找到，返回的是一个数组，里面存储的是子级，如果没有找到，返回的是空数据
           const children =  transListToTreeData(list,item.id) 
          //  //  如果找到了当前部门 item 的子级，那么就给当前部门item 动态添加一个属性  item.children = 找到的数组（children）
           if (children.length) item.children = children

            array.push(item)
          }
        })
        
        return array
        // 递归：业务逻辑重复的时候可以调用自己，但是一定要注意结束递归的条件，不然容易出现死循环

      }

     console.log( transListToTreeData(arr,0));






  </script>
</head>
<body>
  
</body>
</html>